home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / LGP250S1.ZIP / src / libgplus.5 / libgplus / tests / tbitset.cc < prev    next >
C/C++ Source or Header  |  1993-06-06  |  4KB  |  207 lines

  1. /*
  2.  a test/demo of BitSets
  3. */
  4.  
  5. #include <assert.h>
  6.  
  7. #define tassert(ex) { cerr << #ex; \
  8.                        if ((ex)) cerr << "OK\n"; \
  9.                        else cerr << "Fail\n"; }
  10.  
  11.  
  12.  
  13. #include <BitSet.h>
  14.  
  15.  
  16. void test3S(BitSet a, BitSet b, BitSet c)
  17. {
  18. // neg
  19.   assert(~(~a) == a);
  20. // commutative
  21.   assert((a | b) ==  (b | a));
  22.   assert((a & b) ==  (b & a));
  23. // associative
  24.   assert((a | (b | c)) == ((a | b) | c));
  25.   assert((a & (b & c)) == ((a & b) & c));
  26. // distrib
  27.   assert((a & (b | c)) == ((a & b) | (a & c)));
  28.   assert((a | (b & c)) == ((a | b) & (a | c)));
  29. // absorption
  30.   assert((a & (a | b)) == a);
  31.   assert((a | (a & b)) == a);
  32. // demorgan
  33.   assert((a | b) == ~(~a & ~b));
  34.   assert((a & b) == ~(~a | ~b));
  35. // def of -
  36.   assert((a - b) == (a & ~b));
  37.   assert(((a - b) | b) == (a | b));
  38. // def of disjoint union
  39.   assert((a ^ b) == ((a | b) & ~(a & b)));
  40.   assert((a ^ b) == ((a - b) | (b - a)));
  41.  
  42.   BitSet x = a;
  43.   x &= b;
  44.   assert(x == (a & b));
  45.   x |= c;
  46.   assert(x == ((a & b) | c));
  47.   x -= a;
  48.   assert(x == (((a & b) | c) - a));
  49.   x ^= b;
  50.   assert(x == ((((a & b) | c) - a) ^ b));
  51.   assert(x.OK());
  52. }
  53.  
  54. int main()
  55. {
  56.   cout << "BitSet tests:\n";
  57.  
  58.   BitSet a;
  59.   cout << "a = " << a << "\n";
  60.   assert(a.OK());
  61.  
  62.   BitSet b = longtoBitSet(1024);
  63.   cout << "b = " << b << "\n";
  64.   assert(b.OK());
  65.   assert(b[10] == 1);
  66.   assert(b.count() == 1);
  67.   b[0] = b[10];
  68.   assert(b[0] == 1);
  69.   assert(b.count() == 2);
  70.  
  71.   BitSet c = atoBitSet("1010101010101010101010101010101010101010");
  72.   cout << "c = " << c << "\n";
  73.   assert(c.OK());
  74.   assert(c.count() == 20);
  75.   for (int i = 0; i < 40; i += 2)
  76.   {
  77.     assert(c[i] == 1);
  78.     assert(c[i+1] == 0);
  79.   }
  80.   for (int p = 0; p < 5; ++p)
  81.     cout << "c[" << p << "] =" << int(c[p]) << "\n";
  82.  
  83.   BitSet d = atoBitSet("0011001100110011001100110011001100110011");
  84.   cout << "d = " << d << "\n";
  85.   assert(d.OK());
  86.   assert(d.count() == 20);
  87.   assert(d.count(0) == -1);
  88.  
  89.   BitSet e = atoBitSet("1111000011110000111100001111000011110000");
  90.   cout << "e = " << e << "\n";
  91.   assert(e.OK());
  92.   assert(e.count() == 20);
  93.  
  94.   BitSet u = ~a;
  95.   cout << "u = ~a = " << u << "\n";
  96.   assert(a == ~u);
  97.  
  98.   BitSet g = ~e;
  99.   cout << "g = ~e = " << g << "\n";
  100.  
  101.   cout << "~c = " << (~c) << "\n";
  102.   cout << "c & d = " << (c & d) << "\n";
  103.   cout << "c | d = " << (c | d) << "\n";
  104.   cout << "c - d = " << (c - d) << "\n";
  105.   cout << "c ^ d = " << (c ^ d) << "\n";
  106.  
  107.   test3S(b, c, d);
  108.   test3S(a, a, a);
  109.   test3S(a, b, c);
  110.   test3S(a, c, b);
  111.   test3S(c, b, a);
  112.   test3S(c, c, c);
  113.   test3S(c, d, e);
  114.   test3S(e, d, c);
  115.  
  116.   BitSet f = b;
  117.   cout << "f = b = " << f << "\n";
  118.   f &= c;
  119.   cout << "f &= c = " << f << "\n";
  120.   f |= d;
  121.   cout << "f |= d = " << f << "\n";
  122.   f -= e;
  123.   cout << "f -= e = " << f << "\n";
  124.   f ^= u;
  125.   cout << "f ^= u = " << f << "\n";
  126.   assert(f.OK());
  127.  
  128.   assert(c != d);
  129.   assert(!(c == d));
  130.   assert(!(c < d));
  131.   assert(!(c > d));
  132.   assert(!(c <= d));
  133.   assert(!(c >= d));
  134.  
  135.  
  136.   BitSet h = d;
  137.   cout << "h = d\n:" << h << "\n";
  138.  
  139.   assert(d == h);
  140.   assert(d <= h);
  141.   assert(d >= h);
  142.   assert(!(d != h));
  143.   assert(!(d > h));
  144.   assert(!(d < h));
  145.  
  146.   h.set(0);
  147.   cout << "h.set(0):\n" << h << "\n";
  148.  
  149.   assert(!(d == h));
  150.   assert(!(d >= h));
  151.   assert(!(d > h));
  152.   assert((d != h));
  153.   assert(d <= h);
  154.   assert((d < h));
  155.  
  156.   h.set(65);
  157.   cout << "h.set(65):\n" << h << "\n";
  158.   assert(h[65] == 1);
  159.   assert(h[64] == 0);
  160.   assert(h[66] == 0);
  161.   h.clear(2);
  162.   cout << "h.clear(2):\n" << h << "\n";
  163.   assert(h[2] == 0);
  164.   assert(h[3] == 1);
  165.   assert(h[11] == 1);
  166.   h.invert(11,20);
  167.   cout << "h.invert(11,20):\n" << h << "\n";
  168.   assert(h[11] == 0);
  169.   h.set(21,30);
  170.   cout << "h.set(21,30):\n" << h << "\n";
  171.   assert(h[21] == 1);
  172.   h.clear(31,40);
  173.   cout << "h.clear(31, 40):\n" << h << "\n";
  174.   assert(h[33] == 0);
  175.   cout << "h.test(0,5) = " << h.test(0, 5) << "\n";
  176.   cout << "h.test(31,40) = " << h.test(31, 40) << "\n";
  177.  
  178.   cout << "set bits in e:\n";
  179.   for (p = e.first(); p >= 0; p = e.next(p))
  180.   {
  181.     assert(e[p] == 1);
  182.     cout << p << " ";
  183.   }
  184.   cout << "\n";
  185.  
  186.   cout << "clear bits in g (reverse order):\n";
  187.   for (p = g.last(0); p >= 0; p = g.prev(p, 0))
  188.   {
  189.     assert(g[p] == 0);
  190.     cout << p << " ";
  191.   }
  192.   cout << "\n";
  193.  
  194.   assert(a.OK());
  195.   assert(b.OK());
  196.   assert(c.OK());
  197.   assert(d.OK());
  198.   assert(e.OK());
  199.   assert(f.OK());
  200.   assert(g.OK());
  201.   assert(h.OK());
  202.  
  203.   cout << "\nEnd of test.\n";
  204.   return 0;
  205. }
  206.  
  207.